package LeetCode;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * @author VX5
 * @Title: MJC
 * @ProjectName DataStructure
 * @Description: TODO
 * @date ${DAT}15:34
 */
public class interview48 {
    public static void main(String[] args) {
        System.out.println(lengthOfLongestSubstring("abcabcbb"));
    }
//    public static int lengthOfLongestSubstring(String s) {
//        if (s==null||s.length()==0||s.equals("")){
//            return 0;
//        }
//        char[] arr = s.toCharArray();
//        int result = 1;
//        for (int i = 0; i < arr.length; i++){
//            Set<Character> set = new HashSet<>();
//            set.add(arr[i]);
//            int index = 1;
//            for (int j = i+1; j < arr.length;j++){
//                if (!set.add(arr[j])){
//                    result = Math.max(index,result);
//                    set.clear();
//                    break;
//                }
//                index++;
//                result = Math.max(index,result);
//            }
//        }
//        return result;
//    }
public static int lengthOfLongestSubstring(String s) {
    int n = s.length(), ans = 0;
    Map<Character, Integer> map = new HashMap<>();//key出现的字符，value对应的最新的位置
    // try to extend the range [i, j]
    for (int end = 0, start = 0; end < n; end++) {
        if (map.containsKey(s.charAt(end))) {
            start = Math.max(map.get(s.charAt(end)) + 1, start);//由于重复的坐标不知道在start的前方还是后方，所以要取个最大值
        }
        ans = Math.max(ans, end - start + 1);
        map.put(s.charAt(end), end);
    }
    return ans;
}


}
